<?php
 /** @package Garennes - Fonctions de verifications de la base de donnees Garennes */
 
 /**
 * Verification de l'ensemble des notes enseignants
 * @param int $id_professeur Identifiant enseignant
 * @param int $id_classe Identifiant classe
 * @param int $details Taux d'affichage des details de la reparation (0=Aucun, 1=Tout)
 * @return array Rapport [0]=Nombre de lignes,[1]=Texte du rapport
 */
 Function verification_notes_enseignant ($id_professeur, $id_classe, $details)
  {
   Global $id_sql, $nbr_lignes, $ctl, $code_absent, $code_non_rendu, $code_dispense, $code_aucune_note, $debug ;
   $millesime = millesime (0) ;

   // Efface appreciations sans appartenance
   $ok = SQL_commande ("DELETE FROM appreciations WHERE (eleve='0' OR classe='0'  OR discipline='0' OR service_prof='0' OR periode='0') AND professeur='0'", $id_sql) ;
   $ligne = "" ;
   $nbr_lignes = 0 ;
   $professeurs = SQL_commande ("SELECT * FROM utilisateurs WHERE id_utilisateur='".$id_professeur."' AND millesime='".$millesime."' LIMIT 1", $id_sql) ;
   $prof = SQL_tableau_associatif ($professeurs, "") ;
   //$ligne .= "- V&eacute;rification des notes de ".$prof ["nom"]." ".$prof ["prenom"]." -" ;
   $controles = SQL_commande ("SELECT * FROM controles WHERE professeur='".$prof ["id_utilisateur"]."' AND classe='".$id_classe."' ORDER BY enregistrement", $id_sql) ;
   $ok = 0 ;
   For ($j = 0 ; $j < SQL_nbr_lignes ($controles) ; $j++)
    {
     $ct = SQL_tableau_associatif ($controles, "") ;
     // Est-ce que le service_prof existe encore ?
     $serv_prof = SQL_commande ("SELECT * FROM services_prof WHERE id_service_prof='".$ct ["service_prof"]."' LIMIT 1", $id_sql) ;
     If (SQL_nbr_lignes ($serv_prof) > 0)
      {
       // Oui
       $sp = SQL_tableau_associatif ($serv_prof, "") ;
       // Determination du service classe associe
       $serv_classe = SQL_commande ("SELECT * FROM services_classe WHERE id_service_classe='".$sp ["service_classe"]."' LIMIT 1", $id_sql) ;
       If (SQL_nbr_lignes ($serv_classe) > 0)
        {
         $sc = SQL_tableau_associatif ($serv_classe, "") ;
         // Determination des effectifs
         If ($sc ["optionnelle"] == 1)
          {
	   // Si optionnelle
           $effectif = SQL_commande ("SELECT COUNT(o.id_option_eleve) FROM options_eleve o,eleves e WHERE o.service_classe='".$sc ["id_service_classe"]."' AND o.eleve=e.id_eleve", $id_sql) ;
           $liste_eleve = SQL_commande ("SELECT e.id_eleve,e.nom,e.prenoms,e.repere1,e.repere2 FROM options_eleve o,eleves e WHERE o.service_classe='".$sc ["id_service_classe"]."' AND o.eleve=e.id_eleve ORDER BY e.nom,e.prenoms", $id_sql) ;
           $chaine_eleve = "SELECT eleve FROM options_eleve WHERE service_classe='".$sc ["id_service_classe"]."'" ;
           $chaine_destruction = "DELETE FROM options_eleve WHERE service_classe='".$sc ["id_service_classe"]."'" ;
           $chaine_rech = "eleve" ;
          }
         ElseIf (($sc ["groupe"] == 1) And ($sp ["groupe_classe"] > 0))
	  {
	   // Si Groupe
	   $effectif = SQL_commande ("SELECT COUNT(g.id_groupe_eleve) FROM groupes_eleve g,eleves e WHERE g.groupe='".$sp ["groupe_classe"]."' AND g.eleve=e.id_eleve", $id_sql) ;
	   $liste_eleve = SQL_commande ("SELECT e.id_eleve,e.nom,e.prenoms,repere1,repere2 FROM groupes_eleve g,eleves e WHERE g.groupe='".$sp ["groupe_classe"]."' AND g.eleve=e.id_eleve ORDER BY e.nom,e.prenoms", $id_sql) ;
	   $chaine_eleve = "SELECT eleve FROM groupes_eleve WHERE groupe='".$sp ["groupe_classe"]."'" ;
	   $chaine_destruction = "DELETE FROM groupes_eleve WHERE groupe='".$sp ["groupe_classe"]."'" ;
	   $chaine_rech = "eleve" ;
	  }
         Else
	  {
	   // Si obligatoire
	   $effectif = SQL_commande ("SELECT COUNT(id_eleve) FROM eleves WHERE classe='".$ct ["classe"]."'", $id_sql) ;
	   $liste_eleve = SQL_commande ("SELECT id_eleve,nom,prenoms,repere1,repere2 FROM eleves WHERE classe='".$ct ["classe"]."' ORDER BY nom,prenoms", $id_sql) ;
	   $chaine_eleve = "SELECT id_eleve FROM eleves WHERE classe='".$ct ["classe"]."'" ;
	   $chaine_destruction = "" ;
	   $chaine_rech = "id_eleve" ;
          }
	 $ef = SQL_ligne_suivante ($effectif) ;
	 $nbr_notes = SQL_commande ("SELECT n.id_note,e.nom,e.prenoms,e.classe,e.code_classe,e.id_eleve,n.valeur FROM notes n,eleves e WHERE n.controle='".$ct ["id_controle"]."' AND e.id_eleve=n.eleve ORDER BY e.nom,e.prenoms", $id_sql) ;
	 If ($ef [0] > 0)
	  {
           $nombre_de_notes = SQL_nbr_lignes ($nbr_notes) ;
           If ($nombre_de_notes > $ef [0])
            {
             // Il y a trop de notes (eleve changeant de classe par exemple)
             $compteur++ ;
	     $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ;
             $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." " ;
             //If ($ct ["description"]) { $ligne .= "(".$ct ["description"].") " ; }
             $ligne .= "- Nbr Notes=".$nombre_de_notes."/".$ef [0] ;
	     $table_double [0][0] = 0 ;
	     $ajout = 0 ; $efface = 0 ;
             For ($k = 0 ; $k < $nombre_de_notes ; $k++)
              {
               $e = SQL_tableau_associatif ($nbr_notes, "") ;
               If ($e ["classe"] != $ct ["classe"])
                {
	         // Ce n'est pas la bonne classe
                 If ($details == 1) { $ligne .= "\n   Note pour ".$e ["nom"]." ".$e ["prenoms"]." -> Effac&eacute;e (PB Classe)" ; }
                 $nbr_lignes++ ;
		 $efface++ ;
	         $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$e ["id_note"]."' LIMIT 1", $id_sql) ;
	        }
	       Else
	        {
	         // Pas le bon groupe ou option
	         $eleve_ok = SQL_commande ($chaine_eleve." AND ".$chaine_rech."='".$e ["id_eleve"]."'", $id_sql) ;
	         If (SQL_nbr_lignes ($eleve_ok) == 0)
	          {
	           If ($details == 1) { $ligne .= "\n   Note de ".$e ["nom"]." ".$e ["prenoms"]." -> Effac&eacute;e (PB Groupe/option)" ; }
	           $nbr_lignes++ ;
		   $efface++ ;
	           $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$e ["id_note"]."' LIMIT 1", $id_sql) ;
	          }
                 Else
	          {
	           // Peut-etre une note en double pour le meme eleve
	           $ok_double = 0 ;
	           For ($m = 1 ; $m <= $table_double [0][0] ; $m++)
	            {
		     If ($e ["id_eleve"] == $table_double [$m][0]) { $ok_double = $m ; }
		    }
                   If ($ok_double == 0)
		    {
		     // On enregistre si ce n'est pas le meme eleve que precedemment
		     $table_double [0][0]++ ;
		     $table_double [$table_double [0][0]][0] = $e ["id_eleve"] ;
		     $table_double [$table_double [0][0]][1] = $e ["id_note"] ;
                    }
                   Else
		    {
		     // Sinon on detruit la note en trop
		     If ($details == 1) { $ligne .= "\n   Note de ".$e ["nom"]." ".$e ["prenoms"]." -> Eff 1 note sur 2 (Double)" ; }
	             $nbr_lignes++ ;
		     $efface++ ;
		     If (($e ["valeur"] == $code_absent) Or ($e ["valeur"] == $code_non_rendu) Or ($e ["valeur"] == $code_dispense) Or ($e ["valeur"] == $code_aucune_note))
		      {
		       $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$e ["id_note"]."' LIMIT 1", $id_sql) ;
                      }
                     Else
		      {
		       $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$table_double [$ok_double][1]."' LIMIT 1", $id_sql) ;
		      }
		    }
		  }
	        }
	      }
             If (($details == 0) And (($ajout > 0) Or ($efface > 0))) { $ligne .= "\n -> Ajt=".$ajout." - Eff=".$efface ; }
	    }
           ElseIf (SQL_nbr_lignes ($nbr_notes) < $ef [0])
	    {
	     // Il manque des notes (nouvel eleve, groupes ou options par exemple)
	     $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ;
	     $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." " ;
	     //If ($ct ["description"]) { $ligne .= "(".$ct ["description"].") " ; }
	     $ligne .= "- Nbr notes=".SQL_nbr_lignes ($nbr_notes)."/".$ef [0] ;
	     // Recuperation de tous les id eleve ayant des notes
	     $eleves_avec_note = SQL_commande ("SELECT n.eleve FROM notes n, controles c WHERE c.id_controle='".$ct ["id_controle"]."' AND n.controle=c.id_controle", $id_sql) ;
             $table [0] = 0 ;
             For ($k = 0 ; $k < SQL_nbr_lignes ($eleves_avec_note) ; $k++)
              {
	       $ean = SQL_ligne_suivante ($eleves_avec_note) ;
	       $table [0]++ ;
	       $table [$table [0]] = $ean [0] ;
	      }
             // Recuperation de tous les eleves
	     $tous_eleves = SQL_commande ($chaine_eleve, $id_sql) ;
	     $insertion = 0 ; $efface = 0 ;
	     For ($k = 0 ; $k < SQL_nbr_lignes ($tous_eleves) ; $k++)
	      {
	       $te = SQL_ligne_suivante ($tous_eleves) ;
	       // A une note ?
	       $ok_note = 0 ;
	       For ($m = 1 ; $m <= $table [0] ; $m++)
	        {
	         If ($table [$m] == $te [0]) { $ok_note = 1 ; }
	        }
	       If ($ok_note == 0)
	        {
	         // Eleve existant ?
	         $eleve_a_noter = SQL_commande ("SELECT * FROM eleves WHERE id_eleve='".$te [0]."' LIMIT 1", $id_sql) ;
	         If (SQL_nbr_lignes ($eleve_a_noter) > 0)
	          {
	           // Attribution d'une note
	           $eanr = SQL_tableau_associatif ($eleve_a_noter, "") ;
	           If ($details == 1) { $ligne .= "\n   Note '".$code_absent."' en plus pour ".$eanr ["nom"]." ".$eanr ["prenoms"]."(".$te [0].")" ; }
		   $insertion++ ;
	           $ok_requete = SQL_commande ("INSERT INTO notes (eleve,repere1,repere2,valeur,controle,id,enregistrement,millesime) VALUES ('".$eanr ["id_eleve"]."','".$eanr ["repere1"]."','".$eanr ["repere2"]."','".$code_absent."','".$ct ["id_controle"]."','----- verif ----- -----','".Date ("Y-m-d H:i:s")."','".millesime (0)."')", $id_sql) ;
                  }
                 Else
	          {
	           // Eleve non existant dans la base donc destruction
	           If ($details == 1) { $ligne .= "\n   Effacement de l'&eacute;l&egrave;ce No".$te [0] ; }
		   $efface++ ;
	           $ok_requete = SQL_commande ($chaine_destruction." AND eleve='".$te [0]."'", $id_sql) ;
	          }
	        }
               Else
	        {
	         // Aucune action ???
	         //$ligne .= "\n   Aucune action possible." ;
	        }
	      }
             If (($details == 0) And (($insertion > 0) Or ($efface > 0))) { $ligne .= "\n -> Ajt=".$insertion." - Eff=".$efface ; }
	    }
           Else
	    {
	     // Il y a juste assez de notes : Est-ce les bonnes ?
	     $ok_attr = 0 ;
	     $ok_aff = 0 ;
	     $el = SQL_ligne_suivante ($liste_eleve) ;
	     $n = SQL_tableau_associatif ($nbr_notes, "") ;
	     $ajout = 0 ; $efface = 0 ;
	     For ($k = 1 ; $k < SQL_nbr_lignes ($liste_eleve) ; $k++)
	      {
	       //$ligne .= "\n   ".$el [0]."-".$n ["id_eleve"] ;
	       If ($el [0] < $n ["id_eleve"])
		{
		 // Ah c'est un eleve sans note !
		 If ($ok_aff == 0)
		  {
		   $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." - Nbr notes=".SQL_nbr_lignes ($nbr_notes)."/".$ef [0] ;
		   $ok_aff = 1 ;
		  }
		 If ($details == 1) { $ligne .= "\n   Note '".$code_absent."' en plus pour ".$el [1]." ".$el [2]."(".$el [0].")" ; }
		 $ok = 1 ;
		 $nbr_lignes++ ;
		 $ok_attr++ ;
		 $ajout++ ;
     	         $ok_requete = SQL_commande ("INSERT INTO notes (eleve,repere1,repere2,valeur,controle,id,enregistrement,millesime) VALUES ('".$el [0]."','".$el [3]."','".$el [4]."','".$code_absent."','".$ct ["id_controle"]."','----- verif ----- -----','".Date ("Y-m-d H:i:s")."','".millesime (0)."')", $id_sql) ;
		 $el = SQL_ligne_suivante ($liste_eleve) ;
		}
               ElseIf ($el [0] > $n ["id_eleve"])
	        {
		 // Ah c'est un eleve en trop !
		 If ($ok_aff == 0)
		  {
		   $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." - Nbr notes=".SQL_nbr_lignes ($nbr_notes)."/".$ef [0] ;
		   $ok_aff = 1 ;
		  }
		 If ($details == 1) { $ligne .= "\n   Note de ".$n ["nom"]." ".$n ["prenoms"]."(".$n ["id_note"].") -> Effaceacute;e (PB classe)" ; }
		 $ok = 1 ;
		 $nbr_lignes++ ;
		 $ok_attr-- ;
		 $efface++ ;
     	         $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$n ["id_note"]."'", $id_sql) ;
	         $n = SQL_tableau_associatif ($nbr_notes, "") ;
		}
               Else
	        {
	         // Ok tout va bien : Au suivant.
		 $n = SQL_tableau_associatif ($nbr_notes, "") ;
		 $el = SQL_ligne_suivante ($liste_eleve) ;
		}
              }
             If (($details == 0) And (($ajout > 0) Or ($efface > 0))) { $ligne .= "\n -> Ajt=".$ajout." - Eff=".$efface ; }
             If ($ok_attr > 0)
	      {
	       $efface = 0 ;
	       For ($k = 0 ; $k < $ok_attr ; $k++)
	        {
	         $n = SQL_tableau_associatif ($nbr_notes, "") ;
	         If ($ok_aff == 0)
		  {
		   $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." - Nbr notes=".SQL_nbr_lignes ($nbr_notes)."/".$ef [0] ;
		   $ok_aff = 1 ;
		  }
		 If ($details == 1) { $ligne .= "\n   Note de ".$n ["nom"]." ".$n ["prenoms"]."(".$n ["id_note"].") -> Effac&eacute;e (PB classe)" ; }
		 $ok = 1 ;
		 $nbr_lignes++ ;
		 $efface++ ;
		 $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$n ["id_note"]."'", $id_sql) ;
		}
               If (($details == 0) And ($efface > 0)) { $ligne .= "\n -> Efface=".$efface ; }
	      }
	    }
          }
	 Else
	  {
	   // Effectifs a zero !
	   If (SQL_nbr_lignes ($nbr_notes) > 0)
            {
	     // Et en plus il y a des notes !
	     $ligne .= "\n  Controle No".$ct ["id_controle"]." (".$ct ["description"].") existe sans notes" ;
	     $ok = 1 ;
	    }
           Else
	    {
	     // Pas de notes ? Bon ben OK sauf pour les controles !
	     $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." (".$ct ["description"].") : Aucune note" ;
	     $ok = 1 ;
	    }
	  } 
         //
         // Verification des appreciations
	 //
	 $verif_app = SQL_commande ("SELECT * FROM appreciations WHERE classe='".$ct ["classe"]."' AND professeur='".$ct ["professeur"]."' AND discipline='".$ct ["discipline"]."' AND service_prof='".$ct ["service_prof"]."' AND periode='".$ct ["periode"]."'", $id_sql) ;
         $table_va [0] = 0 ;
         For ($kk = 0 ; $kk < SQL_nbr_lignes ($verif_app) ; $kk++)
	  {
	   $va = SQL_tableau_associatif ($verif_app, "") ;
	   $ok_va = 0 ;
	   For ($kkk = 1 ; $kkk <= $table_va [0] ; $kkk++)
	    {
	     If ($va ["eleve"] == $table_va [$kkk]) { $ok_va = 1 ; }
	    }
           If ($ok_va == 0)
	    {
	     // Non traite on enregistre
	     $table_va [0]++ ;
	     $table_va [$table_va [0]] = $va ["eleve"] ;
	    }
           Else
	    {
	     // En double !!!
	     $bien = SQL_commande ("DELETE FROM appreciations WHERE id_appreciation='".$va ["id_appreciation"]."' LIMIT 1", $id_sql) ;
	     If ($ok == 0) { $ligne .= "\n> Purge des appr&eacute;ciations" ; $ok = 1 ; }
	    }
	  }
        }
       Else
        {
         // Pas de service classe trouve : ???
         $ligne .= "\n   Aucun service trouv&eacute;." ;
        }
      }
     Else
      {
       // Le service prof n'existe plus donc on detruit les controles correspondants
       //If ($ok == 0) { $ligne .= "- Professeur : ".$prof ["nom"]." ".$prof ["prenom"]."\n" ; $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ; }
       $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ;
       $ligne .= "\n  Le controle No".$ct ["id_controle"]." " ;
       //If ($ct ["description"]) { $ligne .= "(".$ct ["description"].") " ; }
       $ligne .= "est effac&eacute; (PB service enseignant)" ;
       $ok_requete = SQL_commande ("DELETE FROM controles WHERE id_controle='".$ct ["id_controle"]."'", $id_sql) ;
      }
    }
   If ($ok == 0) { $ligne .= "\n-> Correct !" ; $nbr_lignes = 1 ; }
   $t [0] = $nbr_lignes ;
   $t [1] = $ligne ;
   Return $t ;
  }


 /**
 * Verification des notes des controles de la classe de l'eleve id_eleve
 * @param int $id_eleve Identifiant eleve
 * @param int $details Taux d'affichage des details de la reparation (0=Aucun, 1=Tout)
 * @return array Rapport [0]=Nombre de lignes,[1]=Texte du rapport
 */
 Function verification_notes_eleve ($id_eleve, $details)
  {
   Global $id_sql, $nbr_lignes, $ctl, $code_absent, $code_non_rendu, $code_dispense, $code_aucune_note, $debug ;
   // Efface appreciations sans appartenance
   $ok = SQL_commande ("DELETE FROM appreciations WHERE (eleve='0' OR classe='0' OR discipline='0' OR service_prof='0' OR periode='0') AND professeur='0'", $id_sql) ;
   //$ligne = "" ;
   $ligne = "" ;
   $nbr_lignes = 0 ;
   $eleves = SQL_commande ("SELECT * FROM eleves WHERE id_eleve='".$id_eleve."' LIMIT 1", $id_sql) ;
   $eleve = SQL_tableau_associatif ($eleves, "") ;
   $ligne = "- V&eacute;rification des notes de ".$eleve ["nom"]." ".$eleve ["prenoms"]." -" ;
   $controles = SQL_commande ("SELECT * FROM controles WHERE classe='".$eleve ["classe"]."' ORDER BY enregistrement", $id_sql) ;
   $nombre_controles = SQL_nbr_lignes ($controles) ;
   $ok = 0 ;
   For ($j = 0 ; $j < $nombre_controles ; $j++)
    {
     $ct = SQL_tableau_associatif ($controles, "") ;
     // Est-ce que le service_ prof existe encore ?
     $serv_prof = SQL_commande ("SELECT * FROM services_prof WHERE id_service_prof='".$ct ["service_prof"]."' LIMIT 1", $id_sql) ;
     If (SQL_nbr_lignes ($serv_prof) > 0)
      {
       // Oui
       $sp = SQL_tableau_associatif ($serv_prof, "") ;
       // Determination du service classe associe
       $serv_classe = SQL_commande ("SELECT * FROM services_classe WHERE id_service_classe='".$sp ["service_classe"]."' LIMIT 1", $id_sql) ;
       If (SQL_nbr_lignes ($serv_classe) > 0)
        {
         $sc = SQL_tableau_associatif ($serv_classe, "") ;
         // Determination des effectifs
         If ($sc ["optionnelle"] == 1)
          {
	   // Si optionnelle
           $effectif = SQL_commande ("SELECT COUNT(o.id_option_eleve) FROM options_eleve o,eleves e WHERE o.service_classe='".$sc ["id_service_classe"]."' AND o.eleve=e.id_eleve", $id_sql) ;
           $liste_eleve = SQL_commande ("SELECT e.id_eleve,e.nom,e.prenoms,e.repere1,e.repere2 FROM options_eleve o,eleves e WHERE o.service_classe='".$sc ["id_service_classe"]."' AND o.eleve=e.id_eleve ORDER BY e.id_eleve,e.nom,e.prenoms", $id_sql) ;
           $chaine_eleve = "SELECT eleve FROM options_eleve WHERE service_classe='".$sc ["id_service_classe"]."'" ;
           $chaine_destruction = "DELETE FROM options_eleve WHERE service_classe='".$sc ["id_service_classe"]."'" ;
           $chaine_rech = "eleve" ;
          }
         ElseIf (($sc ["groupe"] == 1) And ($sp ["groupe_classe"] > 0))
	  {
	   // Si Groupe
	   $effectif = SQL_commande ("SELECT COUNT(g.id_groupe_eleve) FROM groupes_eleve g,eleves e WHERE g.groupe='".$sp ["groupe_classe"]."' AND g.eleve=e.id_eleve", $id_sql) ;
	   $liste_eleve = SQL_commande ("SELECT e.id_eleve,e.nom,e.prenoms,e.repere1,e.repere2 FROM groupes_eleve g,eleves e WHERE g.groupe='".$sp ["groupe_classe"]."' AND g.eleve=e.id_eleve ORDER BY e.id_eleve,e.nom,e.prenoms", $id_sql) ;
	   $chaine_eleve = "SELECT eleve FROM groupes_eleve WHERE groupe='".$sp ["groupe_classe"]."'" ;
	   $chaine_destruction = "DELETE FROM groupes_eleve WHERE groupe='".$sp ["groupe_classe"]."'" ;
	   $chaine_rech = "eleve" ;
	  }
         Else
	  {
	   // Si obligatoire
	   $effectif = SQL_commande ("SELECT COUNT(id_eleve) FROM eleves WHERE classe='".$ct ["classe"]."'", $id_sql) ;
	   $liste_eleve = SQL_commande ("SELECT id_eleve,nom,prenoms,repere1,repere2 FROM eleves WHERE classe='".$ct ["classe"]."' ORDER BY id_eleve,nom,prenoms", $id_sql) ;
	   $chaine_eleve = "SELECT id_eleve FROM eleves WHERE classe='".$ct ["classe"]."'" ;
	   $chaine_destruction = "" ;
	   $chaine_rech = "id_eleve" ;
          }
	 $ef = SQL_ligne_suivante ($effectif) ;
	 $nbr_notes = SQL_commande ("SELECT n.id_note,e.nom,e.prenoms,e.classe,e.code_classe,e.id_eleve,n.valeur
                                       FROM notes n,eleves e WHERE n.controle='".$ct ["id_controle"]."' AND e.id_eleve=n.eleve ORDER BY e.id_eleve,e.nom,e.prenoms", $id_sql) ;
	 If ($ef [0] > 0)
	  {
           $nombre_notes = SQL_nbr_lignes ($nbr_notes) ;
           If ($nombre_notes > $ef [0])
            {
             // Il y a trop de notes (eleve changeant de classe par exemple)
             $compteur++ ;
	     $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ;
             $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." " ;
             //If ($ct ["description"]) { $ligne .= "(".$ct ["description"].") " ; }
             $ligne .= "- Nbr notes=".$nombre_notes."/".$ef [0] ;
	     $table_double [0][0] = 0 ;
	     $ajout = 0 ; $efface = 0 ;
             For ($k = 0 ; $k < $nombre_notes ; $k++)
              {
               $e = SQL_tableau_associatif ($nbr_notes, "") ;
               If ($e ["classe"] != $ct ["classe"])
                {
	         // Ce n'est pas la bonne classe
                 If ($details == 1) { $ligne .= "\n   Note pour ".$e ["nom"]." ".$e ["prenoms"]." -> Effac&eacute;e (PB Classe)" ; }
                 $nbr_lignes++ ;
		 $ajout++ ;
	         $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$e ["id_note"]."'", $id_sql) ;
	        }
	       Else
	        {
	         // Pas le bon groupe ou option ?
	         $eleve_ok = SQL_commande ($chaine_eleve." AND ".$chaine_rech."='".$e ["id_eleve"]."'", $id_sql) ;
	         If (SQL_nbr_lignes ($eleve_ok) == 0)
	          {
	           If ($details == 1) { $ligne .= "\n   Note de ".$e ["nom"]." ".$e ["prenoms"]." -> Effac&eacute;e (PB Groupe/option)" ; }
	           $nbr_lignes++ ;
		   $efface++ ;
	           $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$e ["id_note"]."'", $id_sql) ;
	          }
                 Else
	          {
	           // Peut-etre une note en double pour le meme eleve
	           $ok_double = 0 ;
	           For ($m = 1 ; $m <= $table_double [0][0] ; $m++)
	            {
		     If ($e ["id_eleve"] == $table_double [$m][0]) { $ok_double = $m ; }
		    }
                   If ($ok_double == 0)
		    {
		     // On enregistre si ce n'est pas le meme eleve que precedemment
		     $table_double [0][0]++ ;
		     $table_double [$table_double [0][0]][0] = $e ["id_eleve"] ;
		     $table_double [$table_double [0][0]][1] = $e ["id_note"] ;
                    }
                   Else
		    {
		     // Sinon on detruit la note en trop
		     If ($details == 1) { $ligne .= "\n   Note de ".$e ["nom"]." ".$e ["prenoms"]." -> Effacement 1/2 (Double)" ; }
	             $nbr_lignes++ ;
		     $efface++ ;
		     If (($e ["valeur"] == $code_absent) Or ($e ["valeur"] == $code_non_rendu) Or ($e ["valeur"] == $code_dispense) Or ($e ["valeur"] == $code_aucune_note))
		      {
		       $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$e ["id_note"]."'", $id_sql) ;
                      }
                     Else
		      {
		       $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$table_double [$ok_double][1]."'", $id_sql) ;
		      }
		    }
		  }
	        }
	      }
             If (($details == 0) And (($ajout > 0) Or ($efface > 0))) { $ligne .= "\n -> Ajt=".$ajout." - Eff=".$efface ; }
	    }
           ElseIf ($nombre_notes < $ef [0])
	    {
	     // Il manque des notes (nouvel eleve, groupes ou options par exemple)
	     $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ;
	     $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." " ;
	     //If ($ct ["description"]) { $ligne .= "(".$ct ["description"].") " ; }
	     $ligne .= "- Nbr notes=".$nombre_notes."/".$ef [0] ;
	     // Recuperation de tous les id eleve ayant des notes
	     $eleves_avec_note = SQL_commande ("SELECT n.eleve FROM notes n, controles c WHERE c.id_controle='".$ct ["id_controle"]."' AND n.controle=c.id_controle", $id_sql) ;
             $nombre_eleves_avec_note = SQL_nbr_lignes ($eleves_avec_note) ;
             $table [0] = 0 ;
             For ($k = 0 ; $k < $nombre_eleves_avec_note ; $k++)
              {
	       $ean = SQL_ligne_suivante ($eleves_avec_note) ;
	       $table [0]++ ;
	       $table [$table [0]] = $ean [0] ;
	      }
             // Recuperation de tous les eleves
	     $tous_eleves = SQL_commande ($chaine_eleve, $id_sql) ;
             $nombre_tous_eleves = SQL_nbr_lignes ($tous_eleves) ;
	     $insertion = 0 ; $efface = 0 ;
	     For ($k = 0 ; $k < $nombre_tous_eleves ; $k++)
	      {
	       $te = SQL_ligne_suivante ($tous_eleves) ;
	       // A une note ?
	       $ok_note = 0 ;
	       For ($m = 1 ; $m <= $table [0] ; $m++)
	        {
	         If ($table [$m] == $te [0]) { $ok_note = 1 ; }
	        }
	       If ($ok_note == 0)
	        {
	         // Eleve existant ?
	         $eleve_a_noter = SQL_commande ("SELECT * FROM eleves WHERE id_eleve='".$te [0]."' LIMIT 1", $id_sql) ;
	         If (SQL_nbr_lignes ($eleve_a_noter) > 0)
	          {
	           // Attribution d'une note
	           $eanr = SQL_tableau_associatif ($eleve_a_noter, "") ;
	           If ($details == 1) { $ligne .= "\n   Note ".$code_absent." en + pour ".$eanr ["nom"]." ".$eanr ["prenoms"]."(".$te [0].")" ; }
		   $insertion++ ;
	           $ok_requete = SQL_commande ("INSERT INTO notes (eleve,repere1,repere2,valeur,controle,id,enregistrement,millesime) VALUES ('".$eanr ["id_eleve"]."','".$eanr ["repere1"]."','".$eanr ["repere2"]."','".$code_absent."','".$ct ["id_controle"]."','----- verif ----- -----','".Date ("Y-m-d H:i:s")."','".millesime (0)."')", $id_sql) ;
                  }
                 Else
	          {
	           // Eleve non existant dans la base donc destruction
	           If ($details == 1) { $ligne .= "\n   Effacement de l'&eacute;l&egrave;ce No".$te [0] ; }
		   $efface++ ;
	           $ok_requete = SQL_commande ($chaine_destruction." AND eleve='".$te [0]."'", $id_sql) ;
	          }
	        }
               Else
	        {
	         // Aucune action ???
	         //$ligne .= "\n   Aucune action possible." ;
	        }
	      }
             If (($details == 0) And (($insertion > 0) Or ($efface > 0))) { $ligne .= "\n -> Ajt=".$insertion." - Eff=".$efface ; }
	    }
           Else
	    {
	     // Il y a juste assez de notes : Est-ce les bonnes ?
	     $ok_attr = 0 ;
	     $ok_aff = 0 ;
	     $el = SQL_ligne_suivante ($liste_eleve) ;
	     $n = SQL_tableau_associatif ($nbr_notes, "") ;
	     $ajout = 0 ; $efface = 0 ;
             $nombre_liste_eleve = SQL_nbr_lignes ($liste_eleve) ;
	     For ($k = 1 ; $k < $nombre_liste_eleve ; $k++)
	      {
	       //$ligne .= "\n   ".$el [0]."-".$n ["id_eleve"] ;
	       If ($el [0] < $n ["id_eleve"])
		{
		 // Ah c'est un eleve sans note !
		 If ($ok_aff == 0)
		  {
		   $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." - Nbr notes=".SQL_nbr_lignes ($nbr_notes)."/".$ef [0] ;
		   $ok_aff = 1 ;
		  }
		 If ($details == 1) { $ligne .= "\n   Note ".$code_absent." en + pour ".$el [1]." ".$el [2]."(".$el [0].")" ; }
		 $ok = 1 ;
		 $nbr_lignes++ ;
		 $ok_attr++ ;
		 $ajout++ ;
     	         $ok_requete = SQL_commande ("INSERT INTO notes (eleve,repere1,repere2,valeur,controle,id,enregistrement,millesime) VALUES ('".$el [0]."','".$el [3]."','".$el [4]."','".$code_absent."','".$ct ["id_controle"]."','----- verif ----- -----','".Date ("Y-m-d H:i:s")."','".millesime (0)."')", $id_sql) ;
		 $el = SQL_ligne_suivante ($liste_eleve) ;
		}
               ElseIf ($el [0] > $n ["id_eleve"])
	        {
		 // Ah c'est un eleve en trop !
		 If ($ok_aff == 0)
		  {
		   $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." - Nbr notes=".$nombre_notes."/".$ef [0] ;
		   $ok_aff = 1 ;
		  }
		 If ($details == 1) { $ligne .= "\n   Note de ".$n ["nom"]." ".$n ["prenoms"]."(".$n ["id_note"].") -> Effac&eacute;e (PB classe)" ; }
		 $ok = 1 ;
		 $nbr_lignes++ ;
		 $ok_attr-- ;
		 $efface++ ;
     	         $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$n ["id_note"]."' LIMIT 1", $id_sql) ;
	         $n = SQL_tableau_associatif ($nbr_notes, "") ;
		}
               Else
	        {
	         // Ok tout va bien : Au suivant.
		 $n = SQL_tableau_associatif ($nbr_notes, "") ;
		 $el = SQL_ligne_suivante ($liste_eleve) ;
		}
              }
             If (($details == 0) And (($ajout > 0) Or ($efface > 0))) { $ligne .= "\n -> Ajt=".$ajout." - Eff=".$efface ; }
             If ($ok_attr > 0)
	      {
	       $efface = 0 ;
	       For ($k = 0 ; $k < $ok_attr ; $k++)
	        {
	         $n = SQL_tableau_associatif ($nbr_notes, "") ;
	         If ($ok_aff == 0)
		  {
		   $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." - Nbr notes=".$nombre_notes."/".$ef [0] ;
		   $ok_aff = 1 ;
		  }
		 If ($details == 1) { $ligne .= "\n   Note de ".$n ["nom"]." ".$n ["prenoms"]."(".$n ["id_note"].") -> Effac&eacute;e (PB classe)" ; }
		 $ok = 1 ;
		 $nbr_lignes++ ;
		 $efface++ ;
		 $ok_requete = SQL_commande ("DELETE FROM notes WHERE id_note='".$n ["id_note"]."' LIMIT 1", $id_sql) ;
		}
               If (($details == 0) And ($efface > 0)) { $ligne .= "\n -> Efface=".$efface ; }
	      }
	    }
          }
	 Else
	  {
	   // Effectifs a zero !
	   If (SQL_nbr_lignes ($nbr_notes) > 0)
            {
	     // Et en plus il y a des notes !
	     $ligne .= "\n  Controle No".$ct ["id_controle"]." (".$ct ["description"].") existe sans notes" ;
	     $ok = 1 ;
	    }
           Else
	    {
	     // Pas de notes ? Bon ben OK sauf pour les controles !
	     $ligne .= "\n  Pour le controle No".$ct ["id_controle"]." (".$ct ["description"].") : Aucune note" ;
	     $ok = 1 ;
	    }
	  } 
         // Verification des appreciations
	 $verif_app = SQL_commande ("SELECT * FROM appreciations WHERE classe='".$ct ["classe"]."' AND professeur='".$ct ["professeur"]."' AND
	                              discipline='".$ct ["discipline"]."' AND service_prof='".$ct ["service_prof"]."' AND periode='".$ct ["periode"]."'", $id_sql) ;
         $table_va [0] = 0 ;
	 $nbr_verif_app = SQL_nbr_lignes ($verif_app) ;
         For ($kk = 0 ; $kk < $nbr_verif_app ; $kk++)
	  {
	   $va = SQL_tableau_associatif ($verif_app, "") ;
	   $ok_va = 0 ;
	   For ($kkk = 1 ; $kkk <= $table_va [0] ; $kkk++)
	    {
	     If ($va ["eleve"] == $table_va [$kkk]) { $ok_va = 1 ; }
	    }
           If ($ok_va == 0)
	    {
	     // Non traite on enregistre
	     $table_va [0]++ ;
	     $table_va [$table_va [0]] = $va ["eleve"] ;
	    }
           Else
	    {
	     // En double !!!
	     $bien = SQL_commande ("DELETE FROM appreciations WHERE id_appreciation='".$va ["id_appreciation"]."' LIMIT 1", $id_sql) ;
	     If ($ok == 0) { $ligne .= "\n> Purge des appr&eacute;ciations" ; $ok = 1 ; }
	    }
	  }
        }
       Else
        {
         // Pas de service classe trouve : ???
         $ligne .= "\n   Aucun service classe trouv&eacute;." ;
	 $ok = 1 ;
        }
      }
     Else
      {
       // Le service prof n'existe plus donc on detruit les controles correspondants
       //If ($ok == 0) { $ligne .= "- Professeur : ".$prof ["nom"]." ".$prof ["prenom"]."\n" ; $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ; }
       $ok = 1 ; $ctl = 1 ; $nbr_lignes++ ;
       $ligne .= "\n  Le controle No".$ct ["id_controle"]." " ;
       //If ($ct ["description"]) { $ligne .= "(".$ct ["description"].") " ; }
       $ligne .= "est effac&eacute; (PB service enseignant)" ;
       $ok_requete = SQL_commande ("DELETE FROM controles WHERE id_controle='".$ct ["id_controle"]."' LIMIT 1", $id_sql) ;
      }
    }
   $t [0] = $nbr_lignes ;
   $t [1] = $ligne ;
   Return $t ;
  }

 /**
 * Effacer toutes les colonnes de notes ne comportant aucune notes du prof id_prof
 * @param int $id_prof Identifiant enseignant
 * @param int $details Taux d'affichage des details de la reparation (0=Aucun, 1=Tout)
 * @return array Rapport [0]=Nombre de lignes,[1]=Texte du rapport
 */
 Function purger_colonnes_sans_notes ($id_prof, $details)
  {
   Global $id_sql, $code_absent, $code_non_rendu, $code_dispense, $code_aucune_note ;
   $ligne = "" ;
   $nbr_lignes = 0 ;
   $professeurs = SQL_commande ("SELECT nom,prenom FROM utilisateurs WHERE id_utilisateur='".$id_prof."' LIMIT 1", $id_sql) ;
   $prof = SQL_tableau_associatif ($professeurs, "") ;
   $nbr_lignes = 0 ;
   If ($details == 1) { $ligne = "- Purge des colonnes ".$code_absent."/".$code_dispense."/".$code_non_rendu."/".$code_aucune_note." de ".$prof ["nom"]." ".$prof ["prenom"] ; }
   $controles = SQL_commande ("SELECT * FROM controles WHERE professeur='".$id_prof."' ORDER BY id_controle,code_classe,date,enregistrement", $id_sql) ;
   $ok = 0 ;
   For ($j = 0 ; $j < SQL_nbr_lignes ($controles) ; $j++)
    {
     $ct = SQL_tableau_associatif ($controles, "") ;
     // Recherche des notes associees
     $notes = SQL_commande ("SELECT valeur FROM notes WHERE controle='".$ct ["id_controle"]."'", $id_sql) ;
     $nbr_notes = SQL_nbr_lignes ($notes) ;
     $nbr = $nbr_a = $nbr_n = $nbr_d = $nbr_an = 0 ;
     For ($k = 0 ; $k < $nbr_notes ; $k++)
      {
       $n = SQL_ligne_suivante ($notes) ;
       If ($n [0] == $code_absent) { $nbr++ ; $nbr_a++ ; }
       ElseIf ($n [0] == $code_non_rendu) { $nbr++ ; $nbr_n++ ; }
       ElseIf ($n [0] == $code_dispense) { $nbr++ ; $nbr_d++ ; }
       ElseIf ($n [0] == $code_aucune_note) { $nbr++ ; $nbr_an++ ; }
      }
     If ($nbr == $nbr_notes)
      {
       If ($details == 1)
        { 
	 $ligne .= "\n  Contr&ocirc;le ".$ct  ["id_controle"]." effac&eacute;(".$code_absent."=".$nbr_a."/".$code_dispense."=".$nbr_d."/".$code_non_rendu."=".$nbr_n."/".$code_aucune_note."=".$nbr_an.")" ;
	 $nbr_lignes++ ;
	}
       $ok = 1 ;
       $ok_r = SQl_commande ("DELETE FROM notes WHERE controle='".$ct ["id_controle"]."'", $id_sql) ;
       $ok_r = SQl_commande ("DELETE FROM controles WHERE id_controle='".$ct ["id_controle"]."' LIMIT 1", $id_sql) ;
      }
    }
   If ($ok == 0) { $ligne .= "-> Correct !" ; $nbr_lignes++ ; }
   $t [0] = $nbr_lignes ;
   $t [1] = $ligne ;
   Return $t ;
  }
 
 
 /*
 * BULLETINS et RELEVES de notes
 **/
 /**
 * Fonction d'affichage des pourcentages de remplissage
 * @param int $id_classe Identifiant de la classe
 * @param int $periode Numero de la periode
 * @param int $mode 1=Notes,2=Notes+Appreciations,3=%(Notes+appreciations) (+100=>Affichage en 1 ligne)
 * @return string Affichage en HTML
 */
 Function affichage_pourcentages ($id_classe, $periode, $mode)
  {
   Global $id_sql, $millesime, $code_absent, $code_dispense, $code_non_rendu, $code_aucune_note ;
   // Nettoyage
   $ok = SQL_commande ("DELETE FROM moyennes WHERE controle='0' AND eleve='0' AND millesime='".$millesime."'", $id_sql) ;
   // Examen blanc
   $res = SQL_commande ("SELECT examen FROM classes WHERE id_classe='".$id_classe."' LIMIT 1", $id_sql) ;
   $r = SQL_ligne_suivante ($res) ;
   If ($r [0] > 0) { $examen_blanc = 1 ; } Else { $examen_blanc = 0 ; }
   // Nombre de services_prof
   $res = SQL_commande ("SELECT id_service_prof FROM services_prof WHERE classe='".$id_classe."'", $id_sql) ;
   //$r = SQL_ligne_suivante ($res) ;
   $nbr_profs = SQL_nbr_lignes ($res) ;
   // Nombre d'eleves
   $nbr_possibles_notes = 0 ;
   For ($i = 0 ; $i < $nbr_profs ; $i++)
    {
     $r = SQL_ligne_suivante ($res) ;
     $nbre = eleves_par_service_classe ($r [0]) ;
     $nbr_possibles_notes += $nbre [0] ;
    }
   /*
   $res = SQL_commande ("SELECT COUNT(id_eleve) FROM eleves WHERE classe='".$id_classe."'", $id_sql) ;
   $r = SQL_ligne_suivante ($res) ;
   $nbr_eleves = $r [0] ;
   */
   // Nombre de moyennes
   $nbr_p = nombre_periode ($id_classe) ;
   If ($periode == $nbr_p+1)
    {
     $requete  = "SELECT COUNT(m.id_moyenne) FROM moyennes m,eleves e WHERE e.classe='".$id_classe."' AND e.id_eleve=m.eleve AND m.eleve!='0' AND (" ;
     //$requete .= "AND m.valeur!='".$code_absent."' AND m.valeur!='".$code_dispense."' AND m.valeur!='".$code_non_rendu."' AND m.valeur!='".$code_aucune_note."' " ;
     //$requete .= "AND m.periode='".$periode."' AND (m.type='".NOTE_MOY_ELEVE_DISC."' OR m.type='".NOTE_MOY_ELEVE_EXAM."') AND m.millesime='".$millesime."'" ;
     For ($i = 1 ; $i <= $nbr_p ; $i++)
      {
       If ($i > 1) { $requete .= " OR " ; }
       $requete .= "m.periode='".$i."'" ;
      }
     $requete .= ") AND m.type='".NOTE_MOY_ELEVE_DISC."' AND m.millesime='".$millesime."'" ;
     $nbr_possibles_notes *= $nbr_p ;
    }
   Else
    {
     $requete  = "SELECT COUNT(m.id_moyenne) FROM moyennes m,eleves e WHERE e.classe='".$id_classe."' AND e.id_eleve=m.eleve AND m.eleve!='0' " ;
     //$requete .= "AND m.valeur!='".$code_absent."' AND m.valeur!='".$code_dispense."' AND m.valeur!='".$code_non_rendu."' AND m.valeur!='".$code_aucune_note."' " ;
     //$requete .= "AND m.periode='".$periode."' AND (m.type='".NOTE_MOY_ELEVE_DISC."' OR m.type='".NOTE_MOY_ELEVE_EXAM."') AND m.millesime='".$millesime."'" ;
     $requete .= "AND m.periode='".$periode."' AND m.type='".NOTE_MOY_ELEVE_DISC."' AND m.millesime='".$millesime."'" ;
    }
   $res = SQL_commande ($requete, $id_sql) ;
   $r = SQL_ligne_suivante ($res) ;
   $nbr_moyennes = $r [0] ;
   // Nombre d'appreciations
   If (($mode == 2) Or ($mode == 3) Or ($mode == 102))
    {
     If ($periode == $nbr_p+1) { $res = SQL_commande ("SELECT COUNT(id_appreciation) FROM appreciations WHERE classe='".$id_classe."'", $id_sql) ; }
     Else { $res = SQL_commande ("SELECT COUNT(id_appreciation) FROM appreciations WHERE classe='".$id_classe."' AND periode='".$periode."'", $id_sql) ; }
     $r = SQL_ligne_suivante ($res) ;
     $nbr_appreciations = $r [0] ;
    }
   //$nbr_possibles_notes = ($nbr_profs+$examen_blanc)*$nbr_eleves ;
   //$nbr_possibles_appreciations = $nbr_profs*$nbr_eleves ;
   $nbr_possibles_appreciations = $nbr_possibles_notes ;
   If (($nbr_possibles_notes > 0) And ($nbr_possibles_appreciations > 0))
    {
     $pourcentage_moyennes = $nbr_moyennes*100/$nbr_possibles_notes ;
     If ($pourcentage_moyennes > 100) { $pourcentage_moyennes = 100 ; }
     $pourcentage_appreciations = $nbr_appreciations*100/$nbr_possibles_appreciations ;
     If ($pourcentage_appreciations > 100) { $pourcentage_appreciations = 100 ; }
     $pourcentage_moyen = Round (($pourcentage_moyennes+$pourcentage_appreciations)/2) ;
     If ($pourcentage_moyen > 100) { $pourcentage_moyen = 100 ; }
    }
   Else { $pourcentage_moyennes = $pourcentage_moyen = $pourcentage_appreciations = 0 ; }
   
   If ($mode != 3)
    {
     $ligne  = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">" ;
     If ($mode > 100) { $ligne .= "<tr><td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">" ; }
     $ligne .= "<tr><td colspan=\"2\"><font size=\"-1\">Notes&nbsp;:&nbsp;(".$nbr_moyennes."/".$nbr_possibles_notes.")</font></td></tr><tr><td>" ;
     $ligne .= "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"border:1px solid #000000;border-collapse:collapse\" height=\"8\" width=\"100\"><tr>" ;
     If (Round ($pourcentage_moyennes) == 100) { $ligne .= "<td width=\"100%\" bgcolor=\"#00FF00\" height=\"100%\"></td>" ; }
     Else
      {
       $ligne .= "<td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\"><tr>" ;
       $ligne .= "<td width=\"".Round ($pourcentage_moyennes)."\" bgcolor=\"#00FF00\" height=\"100%\"></td><td width=\"".(100-$pourcentage_moyennes)."\" bgcolor=\"#FFFFFF\"></td></tr></table></td>" ;
      }
     $ligne .= "</tr></table></td><td><font size=\"-1\">&nbsp;".Round ($pourcentage_moyennes)."%&nbsp;</font></td></tr>" ;
     If ($mode > 100) { $ligne  .= "</table></td><td>&nbsp;</td><td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">" ; }
     
     If (($mode == 2) Or ($mode == 102))
      {
       $ligne .= "<tr><td colspan=\"2\"><font size=\"-1\">Appr&eacute;ciations&nbsp;:&nbsp;(".$nbr_appreciations."/".$nbr_possibles_appreciations.")</font></td></tr><tr><td>" ;
       $ligne .= "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"border:1px solid #000000;border-collapse:collapse\" height=\"8\" width=\"100\"><tr>" ;
       If (Round ($pourcentage_appreciations) == 100) { $ligne .= "<td width=\"100%\" bgcolor=\"#00FF00\" height=\"100%\"></td>" ; }
       Else
        {
         $ligne .= "<td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\"><tr>" ;
         $ligne .= "<td width=\"".$pourcentage_appreciations."\" bgcolor=\"#00FF00\" height=\"100%\"></td><td width=\"".(100-$pourcentage_appreciations)."\" bgcolor=\"#FFFFFF\"></td></tr></table></td>" ;
	}
       $ligne .= "</tr></table></td>" ;
       $ligne .= "<td><font size=\"-1\">&nbsp;".Round ($pourcentage_appreciations)."%&nbsp;</font></td></tr>" ;
       If ($mode > 100) { $ligne  .= "</table></td></tr>" ; }
      }
     $ligne .= "</table>" ;
    }
   Else
    {
     $ligne  = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">" ;
     $ligne .= "<tr><td colspan=\"3\"><table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"border:1px solid #000000;border-collapse:collapse\" height=\"4\"><tr>" ;
     If (Round ($pourcentage_moyen) == 100)
      {
       $ligne .= "<td width=\"".Round ($pourcentage_moyen)."\" bgcolor=\"#00ff00\" height=\"100%\"></td>" ;
      }
     Else
      {
       $ligne .= "<td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\"><tr>" ;
       $ligne .= "<td width=\"".Round ($pourcentage_moyen)."\" bgcolor=\"" ;
       If (Round ($pourcentage_moyen) < 80) { $ligne .= "#ff0000" ; } Else { $ligne .= "#00ff00" ; }
       $ligne .= "\" height=\"100%\"></td><td width=\"".(100-$pourcentage_moyen)."\" bgcolor=\"#ffffff\"></td></tr></table></td>" ;
      }
     $ligne .= "</tr></table></td></tr>" ;
     $ligne .= "<tr><td><font size=\"-4\"><b title=\"Notes = ".Round ($pourcentage_moyennes)."%&nbsp;(".$nbr_moyennes."/".$nbr_possibles_notes.")\">" ;
     $ligne .= "N:" ; If ($pourcentage_moyennes < 80) { $ligne .= "<font color=\"#dd0000\">".Round ($pourcentage_moyennes)."</font>" ; } Else { $ligne .= Round ($pourcentage_moyennes) ; }
     $ligne .= "%</font></td><td><font size=\"-4\">&nbsp;;&nbsp;</font></td><td align=\"right\"><font size=\"-4\"><b title=\"Appr&eacute;ciations = ".Round ($pourcentage_appreciations)."%&nbsp;(".$nbr_appreciations."/".$nbr_possibles_appreciations.")\">A:" ;
     If ($pourcentage_appreciations < 80) { $ligne .= "<font color=\"#dd0000\">".Round ($pourcentage_appreciations)."</font>" ; } Else { $ligne .= Round ($pourcentage_appreciations) ; }
     $ligne .= "%</b></font></td></tr></table></td>" ;
    }
   Return $ligne ;
  }
 
 /**
 * Fonction d'affichage des pourcentages de remplissage pour un service precis
 * @param int $id_classe Identifiant de la classe
 * @param int $periode Numero de la periode (si egale a nombre_periode+1 alors annee)
 * @param int $id_service_prof Identifiant du service prof
 * @param int $mode 1=Notes,2=Notes+Appreciations
 * @return string Affichage en HTML
 */
 Function etat_service_prof ($id_classe, $periode, $id_service_prof, $mode)
  {
   Global $id_sql, $ligne, $millesime ;
   // Examen blanc
   $res = SQL_commande ("SELECT examen FROM classes WHERE id_classe='".$ligne ["id_classe"]."' LIMIT 1", $id_sql) ;
   $r = SQL_ligne_suivante ($res) ;
   If ($r [0] > 0) { $examen_blanc = 1 ; } Else { $examen_blanc = 0 ; }
   // Nombre de moyennes
   $nbr_p = nombre_periode ($id_classe) ;
   If ($periode == $nbr_p+1)
    {
     // Annee
     $ligne0 = $ligne1 = $ligne2 = "" ;
     For ($i = 1 ; $i <= $nbr_p ; $i++)
      {
       // Nombre de notes
       $res = SQL_commande ("SELECT COUNT(id_controle) FROM controles WHERE classe='".$id_classe."' AND periode='".$i."' AND service_prof='".$id_service_prof."' AND millesime='".$millesime."'", $id_sql) ;
       $r = SQL_ligne_suivante ($res) ;
       $nbr_notes = $r [0] ;
       $ligne1 .= "<td align=\"center\"" ; If ($nbr_notes == 0) { $ligne1 .= " bgcolor=\"#ff0000\"" ; }
       $ligne1 .= "><font size=\"-2\">&nbsp;<b>".$nbr_notes."</b>&nbsp;</font></td>" ;
       
       // Nombre d'appreciations
       If ($mode == 2)
        {
         $type_discipline = champ_disc_type_discipline_par_service_prof ($id_service_prof) ;
         If ($type_discipline == 0)
          {
           $res = SQL_commande ("SELECT COUNT(id_appreciation) FROM appreciations WHERE classe='".$id_classe."' AND periode='".$i."' AND service_prof='".$id_service_prof."'", $id_sql) ;
           $r = SQL_ligne_suivante ($res) ;
           $nbr_appreciations = $r [0] ;
          }
         ElseIf ($type_discipline == 3) { $nbr_appreciations = 1 ; }
	 $ligne2 .= "<td align=\"center\"" ; If ($nbr_appreciations == 0) { $ligne2 .= " bgcolor=\"#ff0000\"" ; }
         $ligne2 .= "><font size=\"-2\">&nbsp;<b>" ; If ($nbr_appreciations > 0) { $ligne2 .= "Oui"; } Else { $ligne2 .= "Non" ; }
         $ligne2 .= "</b>&nbsp;</font></td>" ;
        }
      }
     // Assemblage NOTES
     $ligne = "<td><table border=\"1\" style=\"border-collapse:collapse;border:1px #000000 solid\" width=\"100%\"><tr>" ;
     // Entete 1
     For ($i = 1 ; $i <= $nbr_p ; $i++) { $ligne .= "<td align=\"center\"><font size=\"-2\">&nbsp;<b>".$i."</b>&nbsp;</font></td>" ; }
     // Contenu 1
     $ligne .= "</tr><tr>".$ligne1."</tr></table></td>" ;
     
     // Assemblage APPRECIATIONS
     If ($mode == 2)
      {
       $ligne .= "<td><table border=\"1\" style=\"border-collapse:collapse;border:1px #000000 solid\" width=\"100%\"><tr>" ;
       // Entete 2
       For ($i = 1 ; $i <= $nbr_p ; $i++) { $ligne .= "<td align=\"center\"><font size=\"-2\">&nbsp;<b>".$i."</b>&nbsp;</font></td>" ;}
       // Contenu 2
       $ligne .= "</tr><tr>".$ligne2."</tr></table></td>" ;
      }
    }
   Else
    {
     // Une periode
     // Nombre de notes
     $res = SQL_commande ("SELECT COUNT(id_controle) FROM controles WHERE classe='".$id_classe."' AND service_prof='".$id_service_prof."' AND periode='".$periode."' AND millesime='".$millesime."'", $id_sql) ;
     $r = SQL_ligne_suivante ($res) ;
     $nbr_notes = $r [0] ;
     $ligne = "<td align=\"center\"" ; If ($nbr_notes == 0) { $ligne .= " bgcolor=\"#ff0000\"" ; }
     $ligne .= "><font size=\"-1\">&nbsp;<b>".$nbr_notes."</b>&nbsp;</font></td>" ;
     
     // Nombre d'appreciations
     If ($mode == 2)
      {
       $type_discipline = champ_disc_type_discipline_par_service_prof ($id_service_prof) ;
       If ($type_discipline == 0)
        {
         $res = SQL_commande ("SELECT COUNT(id_appreciation) FROM appreciations WHERE classe='".$id_classe."' AND periode='".$periode."' AND service_prof='".$id_service_prof."'", $id_sql) ;
         $r = SQL_ligne_suivante ($res) ;
         $nbr_appreciations = $r [0] ;
        }
       ElseIf ($type_discipline == 3) { $nbr_appreciations = 1 ; }
       $ligne .= "<td align=\"center\"" ; If ($nbr_appreciations == 0) { $ligne .= " bgcolor=\"#ff0000\"" ; }
       $ligne .= "><font size=\"-1\">&nbsp;<b>" ; If ($nbr_appreciations > 0) { $ligne .= "Oui"; } Else { $ligne .= "Non" ; }
       $ligne .= "</b>&nbsp;</font></td>" ;
      }
    }
   Return $ligne ;
  }
?>